package pe.edu.upc.dsd.epica.web;

import java.io.IOException;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.soap.SOAPException;

import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
import org.apache.log4j.Logger;
import org.springframework.web.context.support.WebApplicationContextUtils;
import pe.edu.upc.dsd.epica.model.Establecimiento;
import pe.edu.upc.dsd.epica.model.ListaPromocion;
import pe.edu.upc.dsd.epica.model.Promocion;
import pe.edu.upc.dsd.epica.service.PromocionService;
import pe.edu.upc.dsd.epica.util.Session;
import pe.edu.upc.dsd.epica.util.UrlBuilder;

public class PromosServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	private PromocionService promoServiceWs;
	private PromocionService promocionServiceRest;
	private final static Logger logger = Logger.getLogger(PromosServlet.class);
    
	@Override
    public void init(ServletConfig config) throws ServletException {
		this.promoServiceWs = WebApplicationContextUtils
				.getWebApplicationContext(config.getServletContext()).getBean(
						"promocionServiceClient",
						PromocionService.class);
		
		UrlBuilder builder=WebApplicationContextUtils
				.getWebApplicationContext(config.getServletContext()).getBean(
						"urlBuilder",
						UrlBuilder.class);
		
		this.promocionServiceRest = JAXRSClientFactory.create(
				builder.getUrlServicio(),
				PromocionService.class);
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		Establecimiento establecimiento = Session.ObtenerValor(req.getSession());
		
		if(establecimiento == null)
		{
			req.getRequestDispatcher("CerrarSesion").forward(req, resp);
			return;
		}
		
		try {
			String codProm= req.getParameter("codigo");
			String codAcc= req.getParameter("accion");
			
			if(codProm!= null && !codProm.equals(""))
			{
				if (codAcc.equals("E"))
					promoServiceWs.delete(codProm);
			}

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		
		String codigoEstablecimiento = establecimiento.getCodigo();

		ListaPromocion promociones = null;
		try {
			promociones = promocionServiceRest
					.findByEstablecimientoCode(codigoEstablecimiento);
		} catch (SOAPException e) {
			logger.error("Titulo:\nBuscar Establecimiento por codigo [PromocionService].\nMensaje:\n"+e.getMessage());
		}

		req.setAttribute("promos", promociones.getListaPromociones());
		
		req.getRequestDispatcher("promos.jsp").forward(req,resp);	
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
		Establecimiento establecimiento = Session.ObtenerValor(req.getSession());
		
		if(establecimiento == null)
		{
			req.getRequestDispatcher("CerrarSesion").forward(req, resp);
			return;
		}
		
		String codigoEstablecimiento = establecimiento.getCodigo();
 
		ListaPromocion promociones = null;
		try {
			promociones = promocionServiceRest.findByEstablecimientoCode(codigoEstablecimiento);
		} catch (SOAPException e) {
			logger.error("Titulo:\nBuscar Establecimiento por codigo [PromocionService].\nMensaje:\n"+e.getMessage());
		}

		req.setAttribute("promos", promociones.getListaPromociones());
		
		req.getRequestDispatcher("promos.jsp").forward(req,resp);
	}
	
}
